
import java.awt.*;
import java.awt.event.*;
import java.util.*;

/**
 * 
 * <p>
 * Representacao grafica de um BotaoDeSelecao instalado em Elevador.
 * </p>
 */
class ArranjoBotaoInternoAndar {

  ///////////////////////////////////////
  // attributes


/**
 * <p>
 * Identifica o andar associado ao BotaoDeSelecao.
 * </p>
 * 
 */
    private int andar; 

/**
 * <p>
 * Representa o rotulo na InterfaceDeUsuario que indica o estado da Porta.
 * </p>
 * 
 */
    private Label estadoPorta; 

/**
 * <p>
 * Representa o rotulo na InterfaceDeUsuario que indica a presenca do
 * Elevador no andar representado pelo BotaoDeSelecao.
 * </p>
 * 
 */
    private Label estadoPresencaElevador; 

/**
 * <p>
 * Representa o proprio BotaoDeSelecao (selecionado indica armado).
 * </p>
 * 
 */
    private Checkbox botaoAndar; 

/**
 * <p>
 * Representa o agrupamento das representacoes graficas relacionadas com o
 * Botao.
 * </p>
 * 
 */
    private Panel panel; 

/**
 * <p>
 * Indica o Elevador em que se encontra instalado o Botao. Os elevadores
 * sao enumerados a partir de 1.
 * </p>
 * 
 */
    private int indElevador; 

   ///////////////////////////////////////
   // associations

/**
 * <p>
 * Representacao grafica do Elevador 'a qual se encontra agregada a
 * representacao grafica do Botao.
 * </p>
 * 
 */
    private RepresentacaoElevador representacaoElevador; 


  ///////////////////////////////////////
  // operations


/**
 * <p>
 * Gera uma instancia de ArranjoBotaoInternoAndar.
 * </p>
 * 
 * @param estadoElevador - representacao grafica do Elevador 'a qual se
 * encontra agregada a representacao grafica do Botao.
 * 
 * @param representacaoElevador 
 * @param indElevador - indicador do Elevador em que se encontra instalado
 * o Botao.
 * 
 * @param andar - andar associado ao Botao.
 * 
 * @return uma instancia de ArranjoBotaoInternoAndar.
 */
    public  ArranjoBotaoInternoAndar(RepresentacaoElevador representacaoElevador, int indElevador, int andar) {        
        GridLayout gridPanel, gridEstados;
        Label indicadorAndar;
        Panel estados;
        this.representacaoElevador = representacaoElevador;
        this.indElevador = indElevador;
        this.andar = andar;
        gridPanel = new GridLayout(1, 3);
        panel = new Panel(gridPanel);
        indicadorAndar = new Label(Integer.toString(andar), Label.RIGHT);
        panel.add(indicadorAndar);
        botaoAndar = new Checkbox();
        botaoAndar.addItemListener(new ComandoBotaoDeSelecao(this, botaoAndar));
        panel.add(botaoAndar);
        gridEstados = new GridLayout(2, 1);
        estados = new Panel(gridEstados);
        estadoPorta = new Label(InterfaceDeUsuarioSimples.portaFechada, Label.CENTER);
        estados.add(estadoPorta);
        estadoPresencaElevador = new Label(InterfaceDeUsuarioSimples.elevadorAusente, Label.CENTER);
        estados.add(estadoPresencaElevador);
        panel.add(estados);
    } // end ArranjoBotaoInternoAndar        

/**
 * <p>
 * Recebe a informacao de que a sua representacao do Botao foi acionada e
 * repassa tal informacao.
 * </p>
 */
    public void registrarAcionamento() {        
        representacaoElevador.registrarAcionamentoBotaoDeSelecao(andar);
    } // end registrarAcionamento        

/**
 * <p>
 * Retorna o agrupamento (Panel) das representacoes graficas relacionadas
 * com Botao.
 * </p>
 * 
 * @return uma referencia Panel.
 */
    public Panel getPanel() {        
        return panel;
    } // end getPanel        

/**
 * <p>
 * Recebe a solicitacao de representar graficamente que o BotaoDeSelecao
 * foi armado.
 * </p>
 */
    public void armarBotaoSelecao() {        
        botaoAndar.setState(true);
    } // end armarBotaoSelecao        

/**
 * <p>
 * Recebe a solicitacao de representar graficamente que o BotaoDeSelecao
 * foi desarmado.
 * </p>
 */
    public void desarmarBotaoSelecao() {        
        botaoAndar.setState(false);
    } // end desarmarBotaoSelecao        

/**
 * <p>
 * Representa na interface de usuario um novo estado da Porta no andar
 * associado ao Botao.
 * </p>
 * 
 * @param fechada - true se a Porta encontra-se fechada.
 */
    public void registrarEstadoPorta(boolean fechada) {        
        if (fechada) estadoPorta.setText(InterfaceDeUsuarioSimples.portaFechada);
        else estadoPorta.setText(InterfaceDeUsuarioSimples.portaAberta);
    } // end registrarEstadoPorta        

/**
 * <p>
 * Representa na interface de usuario a ausencia do Elevador no andar
 * representado pelo Botao.
 * </p>
 */
    public void removerElevador() {        
        estadoPresencaElevador.setText(InterfaceDeUsuarioSimples.elevadorAusente);
    } // end removerElevador        

/**
 * <p>
 * Representa na interface de usuario a ausencia do Elevador no andar
 * representado pelo Botao.
 * </p>
 */
    public void adicionarElevador() {        
        estadoPresencaElevador.setText(InterfaceDeUsuarioSimples.elevadorPresente);
    } // end adicionarElevador        
    
 } // end ArranjoBotaoInternoAndar



